package com.mallbook.model.mapper;

import com.mallbook.model.pojo.Buys;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Author 宋明松
 * @Version V1.0.0
 * @Date 2022-06-23
 * 购物车数据访问层接口
 */
public interface BuysMapper {
    /**
     * 添加购物车数据
     *
     * @param buys 需要添加的购物车信息
     * @param gId  需要添加的商品ID
     */
    void add(@Param("buys") Buys buys, @Param("gId") Integer gId);

    /**
     * 删除（物理删除）
     * 管理员操作
     *
     * @param gid 需要删除的购物车中的商品ID
     */
    void delete(@Param("gid") int gid, @Param("uId") Integer uId);

    /**
     * 批量删除（物理删除）
     * 管理员操作
     *
     * @param gIds 需要删除的购物车中的商品ID的集合
     */
    void deleteMore(@Param("list") List<Integer> gIds, @Param("uId") Integer uId);

    /**
     * 修改一条信息 ，
     * 一般用于增加商品数量，修改商品状态（删除状态，未删除状态）;
     * uId 和 buys 中的商品ID作为条件，修改购物车的中某一个商品的状态以及数量
     *
     * @param buys 要修改的购物车的信息
     * @param uId  需要修改的购物车中的用户ID
     * @param gId  需要修改的购物车中的商品ID
     */
    void update(@Param("buys") Buys buys, @Param("gId") Integer gId, @Param("uId") Integer uId);

    /**
     * 修改多条数据 一般用于修改商品状态（删除状态，未删除状态）
     *
     * @param gIds 需要修改的购物车中的商品ID的集合
     * @param buys 需要修改的购物车中的信息
     * @param uId  需要修改的购物车中的用户ID ,指定用户的购物车
     */
    void updateMore(@Param("list") List<Integer> gIds, @Param("buys") Buys buys, @Param("uId") Integer uId);

    /**
     * 通过用户ID查询购物车
     *
     * @param uId 需要查询的购物车的用户ID
     * @return
     */
    List<Buys> findBuysByUId(int uId);

    /**
     * 根据用户id和商品id查询该商品的数量
     *
     * @param uId 用户ID
     * @param gId 商品ID
     * @return
     */
    Integer findGoodsNumByuIdgId(@Param("uId") Integer uId, @Param("gId") Integer gId);


    /**
     * 根据用户id和商品id查询该商品
     *
     * @param uId 用户ID
     * @param gId 商品ID
     * @return
     */
    Buys findGoodsByuIdgId(@Param("uId") Integer uId, @Param("gId") Integer gId);

    Integer findGoodsNumByuId(@Param("uId") Integer uId);

}